package com.zf.yichat.service;

import com.zf.yichat.model.PrintTreeLevelConfig;
import com.zf.yichat.model.UserPrintTreeConfig;
import com.zf.yichat.model.UserPrintTreeDetails;
import com.zf.yichat.model.UserPrintTreeTask;
import com.zf.yichat.utils.response.FsResponse;

import java.util.List;

public interface PlantTreeService {


    /**
     * 用户获取浇水游戏任务列表
     * @param userId
     * @return
     */
    List<UserPrintTreeTask> queryPlantTreeTask(Long userId);

    /**
     * 浇水游戏任务-用户领取
     * @param userId
     * @return
     */
    FsResponse receivePlantTreeTask(Long userId, Long taskId);

    /**
     * 浇水游戏任务-浇水
     * @param userId
     * @return
     */
    FsResponse usePlantTreeTask(Long userId);

    /**
     * 查询用户游戏初始化配置
     * @param userId
     * @return
     */
    UserPrintTreeConfig queryUserPlantTreeConfig(Long userId);

    /**
     * 查询用户未领取的能量块
     * @param userId
     * @return
     */
    FsResponse queryUnclaimedEnergyBlock(Long userId);

    /**
     * 领取能量块
     * @param userId
     * @param energyBlockId
     * @return
     */
    FsResponse receiveEnergyBlock(Long userId, Long energyBlockId);

    /**
     * 一键领取能量块
     * @param userId
     * @return
     */
    FsResponse oneKeyReceiveEnergyBlock(Long userId);
    /**
     * 查询用户已浇水信息
     * @param userId
     * @return
     */
    List<UserPrintTreeDetails> queryPlantTreeInfo(Long userId);

    /**
     * 查询树配置
     * @param id
     * @return
     */
    PrintTreeLevelConfig selectLevelById(Long id);

    /**
     * 查询树列表
     * @return
     */
    FsResponse selectLevelList();


    void addTreeLevel(PrintTreeLevelConfig level);

    void editTreeLevel(PrintTreeLevelConfig level);

    void deleteTreeLevel(Integer id);

    /**
     * 新增浇水任务次数
     * @param userId
     * @param taskType
     */
    void addTask(Long userId,String taskName, String taskType, Integer number);

    /**
     * 根据userId查询指定类型的赠送次数（每天）
     * @param userId
     * @param type
     * @return
     */
    Integer queryGiveNumbersByType(Long userId, String type);

    /**
     * 查询用户最近一次获取浇水次数的时间差（30分钟）
     * @param userId
     * @param type
     * @return
     */
    Integer queryUserGivePlantTimeDifference(Long userId, String type);


}
